/// BCP-47 标准语言代码常量
class LanguageCodes {
  // 中文
  static const String zhCN = 'zh-CN'; // 中文(简体，中国大陆)
  static const String zhTW = 'zh-TW'; // 中文(台湾國語，繁體)
  static const String zhHK = 'zh-HK'; // 中文(粵語，繁體)

  // 英语
  static const String enUS = 'en-US'; // 英语(美国)
  static const String enGB = 'en-GB'; // 英语(英国)
  static const String enIN = 'en-IN'; // 英语(印度)

  // 其他常用语言
  static const String jaJP = 'ja-JP'; // 日语(日本)
  static const String koKR = 'ko-KR'; // 韩语(韩国)
  static const String frFR = 'fr-FR'; // 法语(法国)
  static const String deDE = 'de-DE'; // 德语(德国)
  static const String esES = 'es-ES'; // 西班牙语(西班牙)
  static const String esMX = 'es-MX'; // 西班牙语(墨西哥)
  static const String itIT = 'it-IT'; // 意大利语(意大利)
  static const String ptBR = 'pt-BR'; // 葡萄牙语(巴西)
  static const String ptPT = 'pt-PT'; // 葡萄牙语(葡萄牙)
  static const String ruRU = 'ru-RU'; // 俄语(俄国)
  static const String arSA = 'ar-SA'; // 阿拉伯语(沙特阿拉伯)
  static const String hiIN = 'hi-IN'; // 印地语(印度)
  static const String thTH = 'th-TH'; // 泰语(泰国)
  static const String nlNL = 'nl-NL'; // 荷兰语(荷兰)
  static const String svSE = 'sv-SE'; // 瑞典语(瑞典)
  static const String daDK = 'da-DK'; // 丹麦语(丹麦)
  static const String fiFI = 'fi-FI'; // 芬兰语(芬兰)
  static const String plPL = 'pl-PL'; // 波兰语(波兰)
  static const String heIL = 'he-IL'; // 希伯来语(以色列)
  static const String idID = 'id-ID'; // 印尼语(印尼)

  /// 获取支持的语言列表
  static List<Map<String, String>> getSupportedLanguages() {
    return [
      {'code': LanguageCodes.zhCN, 'name': '中文(简体)', 'nativeName': '中文（普通话，简体）'},
      {'code': LanguageCodes.zhTW, 'name': '中文(繁体)', 'nativeName': '中文（台灣國語，繁體）'},
      {'code': LanguageCodes.zhHK, 'name': '中文(粤语)', 'nativeName': '中文（粵語，繁體）'},
      {'code': LanguageCodes.enUS, 'name': '英语(美国)', 'nativeName': 'English (United States)'},
      {'code': LanguageCodes.enGB, 'name': '英语(英国)', 'nativeName': 'English (United Kingdom)'},
      {'code': LanguageCodes.enIN, 'name': '英语(印度)', 'nativeName': 'English (India)'},
      {'code': LanguageCodes.jaJP, 'name': '日语', 'nativeName': '日本語（日本）'},
      {'code': LanguageCodes.koKR, 'name': '韩语', 'nativeName': '한국어（한국）'},
      {'code': LanguageCodes.frFR, 'name': '法语', 'nativeName': 'Français (France)'},
      {'code': LanguageCodes.deDE, 'name': '德语', 'nativeName': 'Deutsch (Deutschland)'},
      {'code': LanguageCodes.esES, 'name': '西班牙语(西班牙)', 'nativeName': 'Español (España)'},
      {'code': LanguageCodes.esMX, 'name': '西班牙语(墨西哥)', 'nativeName': 'Español (México)'},
      {'code': LanguageCodes.itIT, 'name': '意大利语', 'nativeName': 'Italiano (Italia)'},
      {'code': LanguageCodes.ptBR, 'name': '葡萄牙语(巴西)', 'nativeName': 'Português (Brasil)'},
      {'code': LanguageCodes.ptPT, 'name': '葡萄牙语(葡萄牙)', 'nativeName': 'Português (Portugal)'},
      {'code': LanguageCodes.ruRU, 'name': '俄语', 'nativeName': 'Русский (Россия)'},
      {'code': LanguageCodes.arSA, 'name': '阿拉伯语', 'nativeName': 'العربية (المملكة العربية السعودية)'},
      {'code': LanguageCodes.hiIN, 'name': '印地语', 'nativeName': 'हिन्दी (भारत)'},
      {'code': LanguageCodes.thTH, 'name': '泰语', 'nativeName': 'ไทย (ประเทศไทย)'},
      {'code': LanguageCodes.nlNL, 'name': '荷兰语', 'nativeName': 'Nederlands (Nederland)'},
      {'code': LanguageCodes.svSE, 'name': '瑞典语', 'nativeName': 'Svenska (Sverige)'},
      {'code': LanguageCodes.daDK, 'name': '丹麦语', 'nativeName': 'Dansk (Danmark)'},
      {'code': LanguageCodes.fiFI, 'name': '芬兰语', 'nativeName': 'Suomi (Suomi)'},
      {'code': LanguageCodes.plPL, 'name': '波兰语', 'nativeName': 'Polski (Polska)'},
      {'code': LanguageCodes.heIL, 'name': '希伯来语', 'nativeName': 'עברית (ישראל)'},
      {'code': LanguageCodes.idID, 'name': '印尼语', 'nativeName': 'Bahasa Indonesia (Indonesia)'},
    ];
  }

  /// 获取语言显示名称
  /// 
  /// 将BCP-47语言代码转换为简短的显示名称
  /// [languageCode] BCP-47标准语言代码，如 'zh-CN', 'en-US'
  /// 返回对应的简短显示名称，如 '中文', 'English'
  static String getLanguageName(String languageCode) {
    // 直接映射BCP-47代码到简短显示名称
    switch (languageCode) {
      case LanguageCodes.zhCN:
        return '中文';
      case LanguageCodes.enUS:
        return 'English';
      case LanguageCodes.jaJP:
        return '日本語';
      case LanguageCodes.koKR:
        return '한국어';
      case LanguageCodes.frFR:
        return 'Français';
      case LanguageCodes.deDE:
        return 'Deutsch';
      case LanguageCodes.esES:
        return 'Español';
      case LanguageCodes.itIT:
        return 'Italiano';
      case LanguageCodes.ptBR:
        return 'Português';
      case LanguageCodes.ruRU:
        return 'Русский';
      case LanguageCodes.arSA:
        return 'العربية';
      case LanguageCodes.hiIN:
        return 'हिन्दी';
      case LanguageCodes.thTH:
        return 'ไทย';
      default:
        // Fallback到支持的语言列表查找
        final supportedLanguages = getSupportedLanguages();
        final language = supportedLanguages.firstWhere(
          (lang) => lang['code'] == languageCode,
          orElse: () => {'code': languageCode, 'name': languageCode, 'nativeName': languageCode},
        );
        return language['name'] ?? languageCode;
    }
  }
}

